package com.demo.java.OD401_450.OD425;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【文本统计分析(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146262121
 */
public class OdMain {
    public static void main(String[] args) {
        // 创建 Scanner 对象来读取控制台输入
        Scanner scanner = new Scanner(System.in);

        StringBuilder content = new StringBuilder();  // 用来存储多行输入
        System.out.println("请输入内容（以分号 ; 结尾）：");

        // 读取每一行内容，直到输入结束
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine().trim();
            if (line.isEmpty()) {
                break;  // 如果输入为空行，则结束读取
            }
            content.append(line).append("\n");  // 将每行输入添加到 content 中
        }

        // 计算文本段落数量
        int result = countTexts(content.toString());
        System.out.println("文本段落数量: " + result);
    }

    private static int countTexts(String content) {
        int count = 0;
        boolean inString = false;  // 是否在字符串中
        boolean inComment = false;  // 是否在注释中
        StringBuilder currentText = new StringBuilder();  // 用于存储当前文本内容

        // 遍历每一个字符
        for (int i = 0; i < content.length(); i++) {
            char c = content.charAt(i);

            // 处理字符串的开始和结束
            if (c == '"' || c == '\'') {
                if (!inComment) {  // 如果不是在注释中
                    inString = !inString;  // 切换字符串状态
                }
            }

            // 处理注释部分
            if (!inString && !inComment && i + 1 < content.length() && content.charAt(i) == '-' && content.charAt(i + 1) == '-') {
                // 如果不是在字符串中，且遇到 "--" 注释符号
                inComment = true;  // 进入注释状态
                i++;  // 跳过下一个字符 "-"，因为 "--" 是一个注释标记
                continue;
            } else if (inComment && c == '\n') {
                // 如果是换行符，并且处于注释中，退出注释状态
                inComment = false;
            }

            // 如果不是在注释和字符串中的普通字符
            if (!inString && !inComment) {
                currentText.append(c);  // 将当前字符添加到文本中
            }

            // 遇到分号，表示当前一段文本结束
            if (c == ';' && !inString && !inComment) {
                if (currentText.toString().trim().length() > 0) {
                    count++;  // 如果当前文本非空，进行计数
                }
                currentText.setLength(0);  // 重置文本
            }
        }

        return count;  // 返回最终文本数量
    }
}
